package org.spring.bean;

import java.util.Arrays;
import java.util.stream.Stream;

/**
 * 包含一个或多个 {@link PropertyValue} 对象的持有者，通常包含针对特定目标 bean 的一次更新。
 *
 * @author 李坤
 * @date 2022/4/22 11:41
 */
public interface PropertyValues {

    /**
     * 返回包含属性值的顺序 {@link Stream}。
     *
     * @since 5.1
     */
    default Stream<PropertyValue> stream() {
        return Arrays.stream(getPropertyValues());
    }

    /**
     * 返回此对象中保存的 PropertyValue 对象的数组。
     */
    PropertyValue[] getPropertyValues();

    /**
     * 返回具有给定名称的属性值（如果有）。
     *
     * @param propertyName 要搜索的名称
     *
     * @return 属性值，如果没有则为 {@code null}
     */
    PropertyValue getPropertyValue(String propertyName);

    /**
     * 此属性是否有属性值（或其他处理条目）？
     *
     * @param propertyName 我们感兴趣的属性的名称
     *
     * @return 该属性是否有属性值
     */
    boolean contains(String propertyName);

    /**
     * 这个持有者根本不包含任何 PropertyValue 对象吗？
     */
    boolean isEmpty();

}
